From 66488140c1aae5a9dc834e69380e790e47819149 Mon Sep 17 00:00:00 2001 From: Jeroen van der Heijden Date: Fri, 11 Jan 2019 16:00:44 +0100 Subject: [PATCH] Fix drop database bug --- include/siri/db/server.h | 2 -- src/siri/db/auth.c | 20 ++++++++++++++++++-- src/siri/db/server.c | 1 + src/siri/net/stream.c | 5 +++++ 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/include/siri/db/server.h b/include/siri/db/server.h index 7f61ec0a..77b1ff8d 100644 --- a/include/siri/db/server.h +++ b/include/siri/db/server.h @@ -94,8 +94,6 @@ siridb_server_t * siridb_server_new( uint16_t port, uint16_t pool); - - void siridb_server_connect(siridb_t * siridb, siridb_server_t * server); int siridb_server_send_pkg( siridb_server_t * server, diff --git a/src/siri/db/auth.c b/src/siri/db/auth.c index 6d3ff9dc..7144815c 100644 --- a/src/siri/db/auth.c +++ b/src/siri/db/auth.c @@ -46,10 +46,20 @@ cproto_server_t siridb_auth_user_request( return CPROTO_ERR_AUTH_CREDENTIALS; } - client->siridb = siridb; - client->origin = user; + siridb_incref(siridb); + if (client->siridb) + { + siridb_decref(client->siridb); + } siridb_user_incref(user); + if (client->origin) + { + siridb_user_decref(((siridb_user_t *) client->origin)); + } + + client->siridb = siridb; + client->origin = user; return CPROTO_RES_AUTH_SUCCESS; } @@ -105,6 +115,12 @@ bproto_server_t siridb_auth_server_request( return BPROTO_AUTH_ERR_UNKNOWN_UUID; } + siridb_incref(siridb); + if (client->siridb) + { + siridb_decref(client->siridb); + } + client->siridb = siridb; client->origin = server; diff --git a/src/siri/db/server.c b/src/siri/db/server.c index 55f7ae3e..d986854b 100644 --- a/src/siri/db/server.c +++ b/src/siri/db/server.c @@ -398,6 +398,7 @@ void siridb_server_connect(siridb_t * siridb, siridb_server_t * server) struct in6_addr sa6; server->client->origin = server; server->client->siridb = siridb; + siridb_incref(siridb); siridb_server_incref(server); uv_tcp_init(siri.loop, (uv_tcp_t *) server->client->stream); diff --git a/src/siri/net/stream.c b/src/siri/net/stream.c index 53d15c9a..b6a88a98 100644 --- a/src/siri/net/stream.c +++ b/src/siri/net/stream.c @@ -270,8 +270,13 @@ void sirinet__stream_free(uv_stream_t * uvclient) case STREAM_TCP_MANAGE: /* a server manage connection */ siri_service_client_free((siri_service_client_t *) client->origin); siri.client = NULL; + assert (client->siridb == NULL); break; } + if (client->siridb) + { + siridb_decref(client->siridb); + } free(client->buf); free(client); free(uvclient); -- 2.30.2